package com.phoenix.jsef.demo.dao;

import com.phoenix.jsef.demo.pojo.CSzFreightEntity;
import com.phoenix.jsef.framework.AccessComponent;
import com.phoenix.jsef.framework.EntityCollection;
import com.phoenix.jsef.framework.FillEntityHelper;
import com.phoenix.jsef.framework.PageInfo;
import com.phoenix.jsef.jdbcutils.CommandType;
import org.springframework.stereotype.Repository;

import java.io.Serializable;
import java.util.List;
import java.util.Map;

 /**
 * @ClassName: CSzFreightDataAccess
 * @Description:TODO(该类提供了对商业实体：CSzFreightEntity 对应的 数据库访问,操作的通用方法.)
 * @author: 李启联
 * @date:   2018-8-1 17:35:22
 * @version V1.0
 * @Copyright: Copyright (c) 2018
 * 申明：本内容未经作者本人同意,禁止外泄以及用于其他的商业项目.
 */
@Repository
public class CSzFreightDataAccess extends AccessComponent {
	/**
	 * 通用的搜索方法
	 * @return 返回查找到的实体对象集合
	 * @throws Exception
	 */
	public EntityCollection getCollection() throws Exception{
		return super.searchEntityCollection(CSzFreightEntity.class);
	}

	/**
	 * 通用的搜索方法
	 * @return 返回查找到的实体对象集合
	 * @throws Exception
	 */
	public List<CSzFreightEntity> getList() throws Exception{
		return (List<CSzFreightEntity>) super.searchEntityList(CSzFreightEntity.class);
	}

    /**
    * 通过slq查询语句或执行存储过程,返回对应实体集合,会自动查询并填充实体里定义的其他实体对象或集合
    * @param commandType 执行类型[SQL语句或存储过程]
    * @param commandText SQL语句或存储过程名称
    * @param obj 执行参数
    * @return
    * @throws Exception
    */
    public List<CSzFreightEntity> getListBySql(CommandType commandType, String commandText, Object... obj) throws Exception{
        return (List<CSzFreightEntity>) super.searchEntityListBySQL(CSzFreightEntity.class,commandType,commandText,obj);
    }

	/**
	 * 通用的搜索方法
	 * @return 返回查找到的实体对象集合的分页对象
	 * @throws Exception
	 */
	public PageInfo<CSzFreightEntity> getPageInfo() throws Exception{
		return super.searchEntityPageInfo(CSzFreightEntity.class);
	}

	/**
	 * 根据ID得到实体对象对应的 Map
	 * @param id 主键
	 * @return 实体对象对应的 Map
	 * @throws Exception
	 */
	public Map<String,Object> getMapById(String id) throws  Exception{
		return FillEntityHelper.searchEntityById(CSzFreightEntity.class, id);
	}

	/**
	 * 根据ID得到单个实体对象
	 * @param id 主键值
	 * @return 单个实体对象
	 * @throws Exception
	 */
	public CSzFreightEntity getEntityById(String id) throws Exception{
		this.getAccessParameter().getFilter().addEqual("FREIGHT_ID", id);
		return (CSzFreightEntity) super.searchEntity(CSzFreightEntity.class);
	}

    /**
    * 根据ids,批量查询实体集合
    * @param ids
    * @return 实体集合
    * @throws Exception
    */
    public List<CSzFreightEntity> searchEntityListByIds(List<? extends Serializable> ids) throws Exception{
        return (List<CSzFreightEntity>) super.searchEntityListByIds(CSzFreightEntity.class,ids);
    }

	/**
	 * 将实体对象插入数据库
	 * @param entity 实体对象
	 * @return 返回成功或失败
	 * @throws Exception
	 */
	public boolean insert(CSzFreightEntity entity) throws Exception{
		return super.insert(entity);
	}

	/**
	 * 将实体对象更新到数据库(支持级联更新：需要在对应实体模型对象中标记级联更新实体对象 例： cascadeUpdateEntitys={A.class,B.class})
	 * @param entity 实体对象
	 * @return 返回成功或失败
	 * @throws Exception
	 */
	public boolean update(CSzFreightEntity entity) throws Exception{
		return super.update(entity);
	}

    /**
    * 将实体对象选择性字段(不为空的)更新到数据库(支持级联更新：需要在对应实体模型对象中标记级联更新实体对象 例： cascadeUpdateEntitys={A.class,B.class})
    * 只更新指定实体不为空的属性到数据库中
    * @param entity 实体对象
    * @return 返回成功或失败
    */
    public boolean updateWithSelective(CSzFreightEntity entity) throws Exception{
        return super.updateWithSelective(entity);
    }

	/**
	 * 将实体对象从数据库中删除 (支持级联删除：需要在对应实体模型对象中标记级联删除实体对象 例： cascadeDeleteEntitys={A.class,B.class})
	 * @param entity  实体对象
	 * @return 返回成功或失败
	 * @throws Exception
	 */
	public boolean delete(CSzFreightEntity entity) throws Exception{
		return super.delete(entity);
	}

	/**
	 * 单纯的根据id的值从数据库中删除一个单一实体对象
	 * @param keyValue
	 * @return
	 * @throws Exception
	 */
	public boolean deleteByIdForSingle(Object keyValue) throws Exception{
		return super.deleteByIdForSingle(CSzFreightEntity.class,keyValue);
	}

    /**
    * 根据ids,批量删除实体对象集合，支持递归删除
    * @param ids 要删除的实体主键值的集合列表
    * @param recursive 是否需要级联删除
    * @return 返回成功或失败
    * @throws Exception
    */
    public boolean deleteBatchIds(List<? extends Serializable> ids, boolean recursive) throws Exception {
        return super.deleteBatchIds(CSzFreightEntity.class,ids,recursive);
    }
}
